// Include standard headers
#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include <gl\glew.h>
#include <SDL_opengl.h>
#include <SDL_image.h>
#include <gl\glu.h>

// Include GLM
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
using namespace glm;

#include <string>
#include <fstream>

//Function declarations
//Starts up SDL, creates window, and initializes OpenGL
bool initSDL();
//Initializes rendering program and clear color
bool initGL();

// Main manager
class MainManager
{
public:
	MainManager();

	~MainManager();

	int startUp();

	void shutDown();
};

// Resource manager
class ResourceManager
{
public:
	ResourceManager();

	~ResourceManager();

	void startUp();
		// Load Avatar
		// Load World objects from resource files
		// Load NPCs

	void shutDown();
};

// Memory manager
class MemoryManager
{
public:
	MemoryManager();

	~MemoryManager();

	void startUp();

	void shutDown();
};

// Render manager
class RenderManager
{
public:
	RenderManager();

	~RenderManager();
	void startUp();

	void shutDown();
};

// File system manager
class FileSystemManager
{
public:
	FileSystemManager();
	~FileSystemManager();
	void startUp();

	void shutDown();
};

// Video manager
class VideoManager
{
public:
	VideoManager();

	~VideoManager();

	void startUp();

	void shutDown();
};

// Texture manager
class TextureManager
{
public:
	TextureManager();

	~TextureManager();

	void startUp();

	void shutDown();

};

// Animation manager
class AnimationManager
{
public:
	AnimationManager();
	~AnimationManager();

	void startUp();

	void shutDown();

};

// Physics manager
class PhyiscsManager
{
public:
	PhyiscsManager();

	~PhyiscsManager();

	void startUp();

	void shutDown();
};